iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0

在雲原生環境中,服務間的單點登入 (Single Sign-On) 能夠保持跨服務驗證的一致性。Quarkus Security 為開發者提供了多套系統結構與身份驗證的方式,包括 OIDC, OAuth2, JWT, LDAP。接下來會選用 OIDC 整合為今天的範例說明,Quarkus OIDC 也直接支援主流的提供商 - apple, facebook, github, google, microsoft...,關於 OIDC 原理滿多文章可以參考,例如今年鐵人賽的 OpenID Connect 協定簡介

RedHat KeyCloak

KeyCloak 是紅帽開源的 SSO 系統,與 Quarkus 是系出同門,甚至在 KeyClock v17 時是直接的把 Application Server 從 Wildfly 換成 Quarkus (我的 Quarkus 驗證了你的 Quarkus ?)

在本地開發 Quarkus 時,需要 OIDC 服務 Dev Service 也會自動幫你起一個 KeyCloak,真貼心

加入 OIDC Extension

quarkus extension add 'oidc'

這個會在 pom.xml 新增以下 dependency

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-oidc</artifactId>
</dependency>

增加 application.properties

Quarkus 發現有 oidc dependency, 但是沒有設定 oidc server url , dev mode會自動起一個 Keycloak, 這裡需要引入一個 realm-path=quarkus-realm.json 在啟動時加入一組 sample user

%prod.quarkus.oidc.auth-server-url=http://localhost:8180/realms/quarkus
quarkus.oidc.client-id=backend-service
quarkus.oidc.credentials.secret=secret
# Tell Dev Services for Keycloak to import the realm file
quarkus.keycloak.devservices.realm-path=quarkus-realm.json

取得 quarkus-realm.json

直接從 github 取得 quarkus-realm.json,裡面會包涵 admin, alice , jdoe 這幾個 user.
在 shell cd 移動到 project/src/main/resources, 下載 quarkus-realm.json

wget https://raw.githubusercontent.com/quarkusio/quarkus-quickstarts/main/security-keycloak-authorization-quickstart/config/quarkus-realm.json

啟動 quarkus:dev

https://ithelp.ithome.com.tw/upload/images/20220929/20135701PIFkhnOzqY.png

可以看到啟動了 Keycloak docker

https://ithelp.ithome.com.tw/upload/images/20220929/20135701q3CPu2l6Ts.png

進入 Dev UI → OIDC

http://localhost:8080/q/dev/io.quarkus.quarkus-oidc/provider
瀏覽器打開,可以看到 OIDC 的 dev ui

按那個登入的按鈕
https://ithelp.ithome.com.tw/upload/images/20220929/2013570168MApakvql.png

可以進入登入頁 ,輸入 alice/alice

https://ithelp.ithome.com.tw/upload/images/20220929/20135701GiZqXw8IIi.png

就可以看到登入成功有 Access Token 與 ID Token

https://ithelp.ithome.com.tw/upload/images/20220929/20135701CnEGBbsSXk.png

Access Token 可以打開看看裡面的內容, 包涵了 username 以及 group 的資訊

https://ithelp.ithome.com.tw/upload/images/20220929/20135701sW2amkfTVF.png

今天很辛苦的(?)把 keycloak 架起來了,明天就來實作如何保護我們的endpoint 吧


上一篇
一步步看 Quarkus 執行, Debugger with IntelliJ
下一篇
Quarkus HTTP Endpoint 保護與 OIDC 授權碼流程機制
系列文
Quarkus, Kotlin, Reactive 雲原生服務開發32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言